#include <WiFi.h>
#include <WiFiUdp.h>
#include <WakeOnLan.h>
#include "wakeup.h"

WiFiUDP UDP;
WakeOnLan WOL(UDP);

void wakeup(const char *macStr, int count)
{
  for (int i = 0; i < count; i++)
  {
    WOL.sendMagicPacket(macStr, 9);
    delay(1); // 每10秒发送一次魔术包
  }
}

int wakeup(const char *macStr, const char *ipStr)
{
  IPAddress ip;
  if (ip.fromString(ipStr) != true)
  {
    Serial.print("IP Error:");
    Serial.println(ipStr);
    return -1;
  }
  Serial.print("wakeup mac:");
  Serial.println(macStr);
  Serial.print("wakeup ip:");
  Serial.println(ipStr);
  WOL.setRepeat(3, 100); // 重复发送WOL魔术包
                         //  WOL.calculateBroadcastAddress(WiFi.localIP(), WiFi.subnetMask());
  WOL.setBroadcastAddress(ip);
  if (WOL.sendMagicPacket(macStr, 9) != true)
  {
    Serial.println("Wakeup Failed");
    return -1;
  }
  return 0;
}

// #if (NET_SWITCH == 1)
// byte mac1[] = {0x00,0xe0,0x4c,0x99,0x4c,0x5f};//替换为自己的电脑mac地址
// byte preamble[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
// // IPAddress ip(255, 255, 255, 255); //幻数据包需要在局域网中广播发送 要控制的电脑的网段的255地址
// IPAddress ip(172, 31, 18, 255); //幻数据包需要在局域网中广播发送 要控制的电脑的网段的255地址
// //int pingResult;
// WiFiUDP UDP; //建立一个WiFiUDP对象 UDP
// #else
// byte mac1[] = {0x00,0x4b,0xf3,0x68,0x9e,0xb5};//替换为自己的电脑mac地址
// byte preamble[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
// // IPAddress ip(255, 255, 255, 255); //幻数据包需要在局域网中广播发送 要控制的电脑的网段的255地址
// IPAddress ip(192, 168, 57, 255); //幻数据包需要在局域网中广播发送 要控制的电脑的网段的255地址
// //int pingResult;
// WiFiUDP UDP; //建立一个WiFiUDP对象 UDP
// #endif

// int wakeup(const char* macStr)
// {
//   if(UDP.beginPacket(ip, 9) != 1) //UDP发送到目标（IP，端口）
//   {
//     Serial.println("beginPacket error");
//   }
//   if(UDP.write(preamble, sizeof(preamble)) != sizeof(preamble)) //写入包头(FF,FF,FF,FF,FF,FF)
//   {
//     Serial.println("write preamble error");
//   }
//   for (byte i = 0; i < 16; i++)
//   {
//     if(UDP.write(mac1, sizeof(mac1)) != sizeof(mac1))
//     {
//       Serial.println("write mac error :" + i);
//     }
//   }
//   Serial.println("唤醒主机");
//   if(UDP.endPacket() != 1) //结束UDP数据包
//   {
//     Serial.println("endPacket error");
//   }
//   return 0;
// }
